// filePreview.js
export default {
  methods: {
    /**
     * 通用文件预览方法
     * @param {String} fileUrl 文件网络地址
     * @param {String} fileName 文件名（带后缀）
     */
    previewFile(fileUrl, fileName) {
      if (!fileUrl || !fileName) {
        return this.showToast('文件信息不完整')
      }
      
      // 获取文件后缀
      const fileExt = this.getFileExt(fileName).toLowerCase()
      
      // 根据文件类型调用不同预览方法
      if (this.isImage(fileExt)) {
        this.previewImage([fileUrl])
      } else if (this.isOffice(fileExt) || fileExt === 'pdf') {
        this.previewDocument(fileUrl, fileExt,fileName)
      } else if (this.isVideo(fileExt)) {
				console.log('video')
        // this.previewVideo(fileUrl)
				this.mixinToPlayVideo(fileUrl)
      } else {
        this.showToast('暂不支持预览此文件类型')
      }
    },
    
    /**
     * 获取文件后缀
     */
    getFileExt(fileName) {
      return fileName.split('.').pop()
    },
    
    /**
     * 判断是否是图片
     */
    isImage(ext) {
      return ['jpg', 'jpeg', 'png', 'gif', 'bmp', 'webp'].includes(ext)
    },
    
    /**
     * 判断是否是Office文档
     */
    isOffice(ext) {
      return ['doc', 'docx', 'xls', 'xlsx', 'ppt', 'pptx'].includes(ext)
    },
    
    /**
     * 判断是否是视频
     */
    isVideo(ext) {
      return ['mp4', 'mov', 'avi', 'mpeg', 'mpg', 'wmv', '3gp', 'mkv'].includes(ext)
    },
    
    /**
     * 预览图片
     */
    previewImage(urls, current = 0) {
      uni.previewImage({
        urls: urls,
        current: current,
        success: () => console.log('图片预览成功'),
        fail: (err) => console.error('图片预览失败', err)
      })
    },
    
    /**
     * 预览文档（PDF/Office）
     */
    previewDocument(fileUrl, fileType,fileName) {
		console.log(fileName)
		console.log(fileUrl)
		// #ifdef H5
	   const link = document.createElement('a');
	   link.href = fileUrl;
	   link.download = fileName || fileUrl.split('/').pop();
	   link.style.display = 'none';
	   
	   document.body.appendChild(link);
	   link.click();
	   document.body.removeChild(link);
	   
	   // 微信浏览器特殊处理
	   if (/MicroMessenger/i.test(navigator.userAgent)) {
		 // uni.showModal({
		 //   title: '下载提示',
		 //   content: '请点击右上角菜单，选择"在浏览器中打开"进行下载',
		 //   showCancel: false
		 // });
	   }
	   return
	   // #endif
      uni.showLoading({ title: '加载中...', mask: true })
      
      uni.downloadFile({
        url: fileUrl,
        success: (res) => {
          if (res.statusCode === 200) {
			  console.log(res)
			  const filePath = res.tempFilePath;
			  console.log(filePath.split('/').pop())
            uni.hideLoading()
			// #ifdef H5
			
			this.$message.info('h5下载')
			// 创建隐藏的下载链接
			const link = document.createElement('a');
			link.href = filePath;
			link.target = '_blank';
			console.log(fileName.split('.')[0])
			link.download = fileName.split('.')[0]; // 获取文件名
			
			// 触发点击
			document.body.appendChild(link);
			link.click();
			document.body.removeChild(link);
			return
			// #endif
            uni.openDocument({
              filePath: res.tempFilePath,
              fileType: this.getWxFileType(fileType),
              success: () => console.log('文档打开成功'),
              fail: (err) => {
                console.error('文档打开失败', err)
                this.showToast('文档打开失败')
              }
            })
          } else {
            uni.hideLoading()
            this.showToast('文件下载失败')
          }
        },
        fail: (err) => {
          uni.hideLoading()
          console.error('文件下载失败', err)
          this.showToast('文件下载失败')
        }
      })
    },
    
    /**
     * 获取微信小程序支持的fileType
     */
    getWxFileType(ext) {
      const typeMap = {
        'pdf': 'pdf',
        'doc': 'doc',
        'docx': 'docx',
        'xls': 'xls',
        'xlsx': 'xlsx',
        'ppt': 'ppt',
        'pptx': 'pptx'
      }
      return typeMap[ext] || 'pdf'
    },
    
    /**
     * 预览视频
     */
    previewVideo(videoUrl) {
      uni.navigateTo({
        url: `/pages/common/videoPlayer?url=${encodeURIComponent(videoUrl)}`,
        fail: (err) => {
          console.error('跳转视频页面失败', err)
          this.showToast('视频打开失败')
        }
      })
    },
    
    /**
     * 显示提示
     */
    showToast(title, icon = 'none') {
      uni.showToast({ title, icon, duration: 2000 })
    }
  }
}